﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace EntitiesLayer
{
    public sealed class PlanEntrenamiento: IEntity
    {


        public int Id { get; private set; }

        //si nos da timepo cambiarlo por la prueba de resistencia
        //public int IdPruebaResistencia { get; set; }
        public ObjetivoPE Objetivo { get; private set; }
        
        public int IdCliente { get; private set; }
        public int IdFuncionario { get; private set; }

        public DateTime FechahoraCreacion { get; private set; }

        public string NotaInstructor { get; private set; }

        public DateTime fechaHoraRevision { get; private set; }


        public string NotaCoordiandor{ get; private set;}

        public int IdCoordiandor { get; private set; }

        public EstadoPlan Estado { get; private set; }
        public char EstadoCode { get { return (char)Estado; } }



        public IList<DetallePlan> Detalles { get; private set; }
        
        



        private PlanEntrenamiento() { }

        //esta metodo es para que el coordinador agregue su revision.
        public PlanEntrenamiento CoordinadorRevicion(int idCoordiandor, string nota, EstadoPlan estado) {

            //falta setear las demas propiedades (hay que setiear todas)
            return new PlanEntrenamiento { 
                
                Estado = estado, NotaCoordiandor = nota, IdCoordiandor = idCoordiandor };
        }

        public sealed class BuilderPlan
        {
            private PlanEntrenamiento plan = new PlanEntrenamiento();


            public int Id{

                get{return plan.Id;}
                set{plan.Id= value;}
            }
            public ObjetivoPE Objetivo
            {
                get { return plan.Objetivo; }
                set { plan.Objetivo = value; }
            }
            public int IdCliente
            {
                get { return plan.IdCliente; } 
                set{plan.IdCliente=value;} }
           
            public int IdFuncionario 
            {
                get{return plan.IdFuncionario;} 
                set{plan.IdFuncionario=value;}
            }

            public DateTime FechahoraCreacion 
            {   get{return plan.FechahoraCreacion;} 
                set{ plan.FechahoraCreacion=value;}
            }

            public string NotaInstructor 
            { get{return plan.NotaInstructor;} 
               set{ plan.NotaInstructor= value;}    
            }


            public DateTime fechaHoraRevision { 
                
                get{return plan.fechaHoraRevision;} 
                set{plan.fechaHoraRevision=value;}
            }
            public int IdCoordiandor 
            { 
                get{return plan.IdCoordiandor;} 
                set{plan.IdCoordiandor=value;} 
            }
            public string NotaCoordiandor 
            { 
                get{return plan.NotaCoordiandor;}
                set{plan.NotaCoordiandor=value;} 
            }

            public EstadoPlan Estado
            {
                get { return plan.Estado; }

                set { plan.Estado = value; }
            }

            public IList<DetallePlan> Detalles 
            { 
                get{return plan.Detalles;}
                set{plan.Detalles= value;} 
            }
            public PlanEntrenamiento Build()
            {
                //validacion aqui
                PlanEntrenamiento build = plan;
                plan = null; 
                return build;
            }

            

            
        }
    }

    public enum EstadoPlan { 
    
        Pendiente='P',

        Aprobado='A',

        Reprobado='R'
    }
}
